rm(list = ls()) 
setwd("C:/Users/吕港/Desktop/大三上/数据挖掘/大作业/房源数据分析/大作业最终文件")   #设置工作路径


######读入数据
#如果你用的是Windows系统，请运行以下代码
esf <- read.csv("secondHouse.csv",header = T)   #导入数据
names(esf)[1:15]<-c("序号","具体楼层","总面积.平方米.","单价.元.m2.","建造时间","地理位置经度","卧室数","地理位置经度","厅数","楼层高度","详细地址","城区","总价.元.","楼层","介绍")

#View(esf)
n=dim(esf)[1]			  #输出样本量。


######通过简单的描述性分析，清洗数据，逐个变量进行处理

#描述分析：房屋介绍
table(esf$介绍)            #查看房屋介绍分布，文本型变量，且比较均匀，不做处理

#描述分析：总面积
boxplot(esf$总面积.平方米.)    #查看总面积的分布,箱线图显示存在较多离群点
quantile(esf$总面积.平方米.,c(0.01,0.99))		#查看总面积1%和99%分位数
esf=esf[esf[,3]>30&esf[,3]<230,]      #根据3σ原理中的1%分位数和99%分位数,将总面积小于30平方米和大于230平方米的观测剔除

#将卧室数和厅数转换为数值型变量
esf$卧室数<-as.numeric(esf$卧室数)
esf$厅数<-as.numeric(esf$厅数)

#描述分析：卧室数和厅数
table(esf$卧室数)			  #查看频数分布：卧室数为7以上的的观测仅有8个，考虑删除
esf=esf[esf[,7]<7,]    	#对卧室数变量做部分删除处理
table(esf$厅数)		    	#查看频数分布：厅数为4以上的的观测仅有12个，考虑删除
esf=esf[esf[,9]<4,]			#对厅数变量做部分删除处理

#描述分析：房屋单价
boxplot(esf$单价.元.m2.)    #查看房屋单价的分布,箱线图显示存在离群点
quantile(esf$单价.元.m2.,c(0.01,0.99))		#查看房屋单价1%和99%分位数
esf=esf[esf[,4]>20541&esf[,4]<122448,]      #根据3σ原理中的1%分位数和99%分位数,将房屋单价低于20541元/平方米和高于122448元/平方米的观测剔除

#描述分析：楼层
table(esf$楼层)      #查看楼层分布。其中，“低层”、“中层”、“高层”均为普通住宅

#描述分析：建造时间
table(esf$建造时间)  #查看建造时间分布,发现原始数据中部分年限观测值很少（该观测样本在前面的清洗工作中已被剔除）,且时间出现断层,考虑删除
esf=esf[esf[,5]>1973|esf[,5]==1936|esf[,5]==1953|esf[,5]==1954|esf[,5]==1957|esf[,5]==1958|esf[,5]==1964,]      #对建造时间变量做部分删除处理
table(esf$建造时间)

#“详细地址”亦为文本型变量，不做处理

#描述分析：城区
table(esf$城区)     #查看城区分布，崇明仅有6个观测,金山仅有17个观测，考虑删除
esf=esf[esf[,12]!="崇明"&esf[,12]!="金山",]     #对城区变量做部分删除处理
table(esf$城区) 

######查看删除的观测条数和比例
diff=n-dim(esf)[1]		   #删除的观测共1754条
round(100*diff/dim(esf)[1],2)      #删除观测所占比例为4.91%


######保存清洗后的数据
write.csv(esf,file="updateHouse.csv")
write.table(esf, file = "updateHouse.txt", fileEncoding = "UTF-8")

